using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

using SlimDX;
using SlimDX.Direct3D9;
using SlimDX.Windows;

using miciv.Misc;

namespace miciv.Rendering
{
    public delegate void ParameterizableChangedEventHandler();

    public interface ISize
    {
        Vector2 Size { get; set; }
    }

    public interface IPosition
    {
        Vector2 Position { get; set; }
    }

    public interface IDiffuse
    {
        Color4 Diffuse { get; set; }
    }

    public interface IAlbedoTexture
    {
        TextureManager.ManagedTexture Albedo { get; set; }
    }

    public interface IMaskTexture
    {
        TextureManager.ManagedTexture Mask { get; set; }
    }

    public interface IParameterizable // ouch !!
    {
        IDataSource DataSource { get; set; }
        int DataSourceIndex { get; set; }
        bool HasParameters { get; }
        bool InheritsDataSource { get; set; }
        bool AddParameter(string _strSource, string _strDestination);
        void GetParameters(Hashtable _htblParameters);
    }

    public interface ILayout
    {
        void SetLayout(int _sRows, int _sColumns, bool _bFeedRowsFirst);
        bool NeedLayoutUpdate { get; }
        void UpdateLayout();
    }

    public interface IUIManager
    {
        string Name { get; }
        float Width { get; set; }
        float Height { get; set; }
        bool Initialize(CoreContext _coreContext, float _fWidth, float _fHeight);
        bool LoadScene(string _strFile);
        bool ActivateScene(string _strScene, bool _bPushCurrentActiveScene, bool _bShowPushedScene);
        void DeactivateScene(bool _bPushCurrentActiveScene, bool _bShowPushedScene);
        void PopPreviousScene();
        void ClearScenesStack();
        void Update(float _fTime);
        bool UnloadScene(string _strScene);
        void UnloadScenes();
        void DebugText(Vector2 _f2Position, Color4 _c4Diffuse, string _strText);
    }
}
